<?php

// +----------------------------------------------------------------------
// | ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
// +----------------------------------------------------------------------
// | 官方网站: http://think.ctolog.com
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | github开源项目：https://github.com/zoujingli/ThinkAdmin
// +----------------------------------------------------------------------

use service\DataService;
use service\NodeService;
use think\Db;

/**
 * 检测手机号是否正确
 * @author jungshen
 * @param $mobile
 * @return bool
 */
function check_mobile($mobile){
    $isMobile="/^1[345678]{1}\d{9}$/";
    if(!preg_match($isMobile,$mobile))
    {
        return false;
    }
    return true;
}
/**
 * 生成指定长度的随机字符串
 * @param unknown $length
 * @param unknown $type 0:全部字符 1：只要数字 2：小写字母 3：大写字母
 * @return string
 */
function createRandomStr($length,$type=0){
    switch ($type){
        case 0:
            $str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';//62个字符
            break;
        case 1:
            $str = '0123456789';
            break;
        case 2:
            $str = 'abcdefghijklmnopqrstuvwxyz';
            break;
        case 3:
            $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            break;
    }
    $strlen = strlen($str);
    while($length > $strlen){
        $str .= $str;
        $strlen *=2;
    }
    $str = str_shuffle($str);
    return substr($str,0,$length);
}

/**
 * 得到城市名称
 * @param $id
 * @return array|mixed|null|PDOStatement|string|\think\Model
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\ModelNotFoundException
 * @throws \think\exception\DbException
 */
function get_city_name($id){
    return getmodel($id, 'system_city', 'name');
}

/**
 * 根据省市区详细地址得到完整详细地址
 * @param $address
 * @param int $is_simple
 * @param string $delimiter
 * @return null|string
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\ModelNotFoundException
 * @throws \think\exception\DbException
 */
function address_tostring($address,$is_simple=0,$delimiter=''){
    if(is_array($address)){
        //传的城市记录
        if($is_simple){
            return get_city_name($address['city']).$delimiter.get_city_name($address['district']).$delimiter.$address['address'];
        }else{
            return get_city_name($address['province']).$delimiter.get_city_name($address['city']).$delimiter.get_city_name($address['district']).$delimiter.$address['address'];
        }
    }else{
        return null;
    }
}

/**
 * 通过id主键获取记录或者字段值
 * @param $id
 * @param $table_name
 * @param null $field
 * @return array|mixed|null|PDOStatement|string|\think\Model
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\ModelNotFoundException
 * @throws \think\exception\DbException
 */
function getmodel($id,$table_name,$field=null){
    $vo = Db::name($table_name)->where('id',$id)->find();
    if(is_null($field)){
        return $vo;
    }else{
        return $vo[$field];
    }
}

/**
 * 打印输出数据到文件
 * @param mixed $data 输出的数据
 * @param bool $force 强制替换
 * @param string|null $file
 */
function p($data, $force = false, $file = null)
{
    is_null($file) && $file = env('runtime_path') . date('Ymd') . '.txt';
    $str = (is_string($data) ? $data : (is_array($data) || is_object($data)) ? print_r($data, true) : var_export($data, true)) . PHP_EOL;
    $force ? file_put_contents($file, $str) : file_put_contents($file, $str, FILE_APPEND);
}

/**
 * RBAC节点权限验证
 * @param string $node
 * @return bool
 */
function auth($node)
{
    return NodeService::checkAuthNode($node);
}

/**
 * 设备或配置系统参数
 * @param string $name 参数名称
 * @param bool $value 默认是null为获取值，否则为更新
 * @return string|bool
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
function sysconf($name, $value = null)
{
    static $config = [];
    if ($value !== null) {
        list($config, $data) = [[], ['name' => $name, 'value' => $value]];
        return DataService::save('SystemConfig', $data, 'name');
    }
    if (empty($config)) {
        $config = Db::name('SystemConfig')->column('name,value');
    }
    return isset($config[$name]) ? $config[$name] : '';
}

/**
 * 日期格式标准输出
 * @param string $datetime 输入日期
 * @param string $format 输出格式
 * @return false|string
 */
function format_datetime($datetime, $format = 'Y年m月d日 H:i:s')
{
    return date($format, strtotime($datetime));
}

/**
 * UTF8字符串加密
 * @param string $string
 * @return string
 */
function encode($string)
{
    list($chars, $length) = ['', strlen($string = iconv('utf-8', 'gbk', $string))];
    for ($i = 0; $i < $length; $i++) {
        $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0);
    }
    return $chars;
}

/**
 * UTF8字符串解密
 * @param string $string
 * @return string
 */
function decode($string)
{
    $chars = '';
    foreach (str_split($string, 2) as $char) {
        $chars .= chr(intval(base_convert($char, 36, 10)));
    }
    return iconv('gbk', 'utf-8', $chars);
}

/**
 * 下载远程文件到本地
 * @param string $url 远程图片地址
 * @return string
 */
function local_image($url)
{
    return \service\FileService::download($url)['url'];
}
